home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / distutils / dist.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  27KB  |  899 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __revision__ = '$Id: dist.py 38697 2005-03-23 18:54:36Z loewis $'
  5. import sys
  6. import os
  7. import string
  8. import re
  9. from types import *
  10. from copy import copy
  11.  
  12. try:
  13.     import warnings
  14. except ImportError:
  15.     warnings = None
  16.  
  17. from distutils.errors import *
  18. from distutils.fancy_getopt import FancyGetopt, translate_longopt
  19. from distutils.util import check_environ, strtobool, rfc822_escape
  20. from distutils import log
  21. from distutils.debug import DEBUG
  22. command_re = re.compile('^[a-zA-Z]([a-zA-Z0-9_]*)$')
  23.  
  24. class Distribution:
  25.     global_options = [
  26.         ('verbose', 'v', 'run verbosely (default)', 1),
  27.         ('quiet', 'q', 'run quietly (turns verbosity off)'),
  28.         ('dry-run', 'n', "don't actually do anything"),
  29.         ('help', 'h', 'show detailed help message')]
  30.     common_usage = "Common commands: (see '--help-commands' for more)\n\n  setup.py build      will build the package underneath 'build/'\n  setup.py install    will install the package\n"
  31.     display_options = [
  32.         ('help-commands', None, 'list all available commands'),
  33.         ('name', None, 'print package name'),
  34.         ('version', 'V', 'print package version'),
  35.         ('fullname', None, 'print <package name>-<version>'),
  36.         ('author', None, "print the author's name"),
  37.         ('author-email', None, "print the author's email address"),
  38.         ('maintainer', None, "print the maintainer's name"),
  39.         ('maintainer-email', None, "print the maintainer's email address"),
  40.         ('contact', None, "print the maintainer's name if known, else the author's"),
  41.         ('contact-email', None, "print the maintainer's email address if known, else the author's"),
  42.         ('url', None, 'print the URL for this package'),
  43.         ('license', None, 'print the license of the package'),
  44.         ('licence', None, 'alias for --license'),
  45.         ('description', None, 'print the package description'),
  46.         ('long-description', None, 'print the long package description'),
  47.         ('platforms', None, 'print the list of platforms'),
  48.         ('classifiers', None, 'print the list of classifiers'),
  49.         ('keywords', None, 'print the list of keywords'),
  50.         ('provides', None, 'print the list of packages/modules provided'),
  51.         ('requires', None, 'print the list of packages/modules required'),
  52.         ('obsoletes', None, 'print the list of packages/modules made obsolete')]
  53.     display_option_names = map((lambda x: translate_longopt(x[0])), display_options)
  54.     negative_opt = {
  55.         'quiet': 'verbose' }
  56.     
  57.     def __init__(self, attrs = None):
  58.         self.verbose = 1
  59.         self.dry_run = 0
  60.         self.help = 0
  61.         for attr in self.display_option_names:
  62.             setattr(self, attr, 0)
  63.         
  64.         self.metadata = DistributionMetadata()
  65.         for basename in self.metadata._METHOD_BASENAMES:
  66.             method_name = 'get_' + basename
  67.             setattr(self, method_name, getattr(self.metadata, method_name))
  68.         
  69.         self.cmdclass = { }
  70.         self.command_packages = None
  71.         self.script_name = None
  72.         self.script_args = None
  73.         self.command_options = { }
  74.         self.dist_files = []
  75.         self.packages = None
  76.         self.package_data = { }
  77.         self.package_dir = None
  78.         self.py_modules = None
  79.         self.libraries = None
  80.         self.headers = None
  81.         self.ext_modules = None
  82.         self.ext_package = None
  83.         self.include_dirs = None
  84.         self.extra_path = None
  85.         self.scripts = None
  86.         self.data_files = None
  87.         self.command_obj = { }
  88.         self.have_run = { }
  89.         if attrs:
  90.             options = attrs.get('options')
  91.             if options:
  92.                 del attrs['options']
  93.                 for command, cmd_options in options.items():
  94.                     opt_dict = self.get_option_dict(command)
  95.                     for opt, val in cmd_options.items():
  96.                         opt_dict[opt] = ('setup script', val)
  97.                     
  98.                 
  99.             
  100.             if attrs.has_key('licence'):
  101.                 attrs['license'] = attrs['licence']
  102.                 del attrs['licence']
  103.                 msg = "'licence' distribution option is deprecated; use 'license'"
  104.                 if warnings is not None:
  105.                     warnings.warn(msg)
  106.                 else:
  107.                     sys.stderr.write(msg + '\n')
  108.             
  109.             for key, val in attrs.items():
  110.                 if hasattr(self.metadata, 'set_' + key):
  111.                     getattr(self.metadata, 'set_' + key)(val)
  112.                     continue
  113.                 if hasattr(self.metadata, key):
  114.                     setattr(self.metadata, key, val)
  115.                     continue
  116.                 if hasattr(self, key):
  117.                     setattr(self, key, val)
  118.                     continue
  119.                 msg = 'Unknown distribution option: %s' % repr(key)
  120.                 if warnings is not None:
  121.                     warnings.warn(msg)
  122.                     continue
  123.                 sys.stderr.write(msg + '\n')
  124.             
  125.         
  126.         self.finalize_options()
  127.  
  128.     
  129.     def get_option_dict(self, command):
  130.         dict = self.command_options.get(command)
  131.         if dict is None:
  132.             dict = self.command_options[command] = { }
  133.         
  134.         return dict
  135.  
  136.     
  137.     def dump_option_dicts(self, header = None, commands = None, indent = ''):
  138.         pformat = pformat
  139.         import pprint
  140.         if commands is None:
  141.             commands = self.command_options.keys()
  142.             commands.sort()
  143.         
  144.         if header is not None:
  145.             print indent + header
  146.             indent = indent + '  '
  147.         
  148.         if not commands:
  149.             print indent + 'no commands known yet'
  150.             return None
  151.         
  152.         for cmd_name in commands:
  153.             opt_dict = self.command_options.get(cmd_name)
  154.             if opt_dict is None:
  155.                 print indent + "no option dict for '%s' command" % cmd_name
  156.                 continue
  157.             print indent + "option dict for '%s' command:" % cmd_name
  158.             out = pformat(opt_dict)
  159.             for line in string.split(out, '\n'):
  160.                 print indent + '  ' + line
  161.             
  162.         
  163.  
  164.     
  165.     def find_config_files(self):
  166.         files = []
  167.         check_environ()
  168.         sys_dir = os.path.dirname(sys.modules['distutils'].__file__)
  169.         sys_file = os.path.join(sys_dir, 'distutils.cfg')
  170.         if os.path.isfile(sys_file):
  171.             files.append(sys_file)
  172.         
  173.         if os.name == 'posix':
  174.             user_filename = '.pydistutils.cfg'
  175.         else:
  176.             user_filename = 'pydistutils.cfg'
  177.         if os.environ.has_key('HOME'):
  178.             user_file = os.path.join(os.environ.get('HOME'), user_filename)
  179.             if os.path.isfile(user_file):
  180.                 files.append(user_file)
  181.             
  182.         
  183.         local_file = 'setup.cfg'
  184.         if os.path.isfile(local_file):
  185.             files.append(local_file)
  186.         
  187.         return files
  188.  
  189.     
  190.     def parse_config_files(self, filenames = None):
  191.         ConfigParser = ConfigParser
  192.         import ConfigParser
  193.         if filenames is None:
  194.             filenames = self.find_config_files()
  195.         
  196.         if DEBUG:
  197.             print 'Distribution.parse_config_files():'
  198.         
  199.         parser = ConfigParser()
  200.         for filename in filenames:
  201.             if DEBUG:
  202.                 print '  reading', filename
  203.             
  204.             parser.read(filename)
  205.             for section in parser.sections():
  206.                 options = parser.options(section)
  207.                 opt_dict = self.get_option_dict(section)
  208.                 for opt in options:
  209.                     if opt != '__name__':
  210.                         val = parser.get(section, opt)
  211.                         opt = string.replace(opt, '-', '_')
  212.                         opt_dict[opt] = (filename, val)
  213.                         continue
  214.                 
  215.             
  216.             parser.__init__()
  217.         
  218.  
  219.     
  220.     def parse_command_line(self):
  221.         toplevel_options = self._get_toplevel_options()
  222.         if sys.platform == 'mac':
  223.             import EasyDialogs as EasyDialogs
  224.             cmdlist = self.get_command_list()
  225.             self.script_args = EasyDialogs.GetArgv(toplevel_options + self.display_options, cmdlist)
  226.         
  227.         self.commands = []
  228.         parser = FancyGetopt(toplevel_options + self.display_options)
  229.         parser.set_negative_aliases(self.negative_opt)
  230.         parser.set_aliases({
  231.             'licence': 'license' })
  232.         args = parser.getopt(args = self.script_args, object = self)
  233.         option_order = parser.get_option_order()
  234.         log.set_verbosity(self.verbose)
  235.         if self.handle_display_options(option_order):
  236.             return None
  237.         
  238.         while args:
  239.             args = self._parse_command_opts(parser, args)
  240.             if args is None:
  241.                 return None
  242.                 continue
  243.         if self.help:
  244.             self._show_help(parser, display_options = len(self.commands) == 0, commands = self.commands)
  245.             return None
  246.         
  247.         if not self.commands:
  248.             raise DistutilsArgError, 'no commands supplied'
  249.         
  250.         return 1
  251.  
  252.     
  253.     def _get_toplevel_options(self):
  254.         return self.global_options + [
  255.             ('command-packages=', None, 'list of packages that provide distutils commands')]
  256.  
  257.     
  258.     def _parse_command_opts(self, parser, args):
  259.         Command = Command
  260.         import distutils.cmd
  261.         command = args[0]
  262.         if not command_re.match(command):
  263.             raise SystemExit, "invalid command name '%s'" % command
  264.         
  265.         self.commands.append(command)
  266.         
  267.         try:
  268.             cmd_class = self.get_command_class(command)
  269.         except DistutilsModuleError:
  270.             msg = None
  271.             raise DistutilsArgError, msg
  272.  
  273.         if not issubclass(cmd_class, Command):
  274.             raise DistutilsClassError, 'command class %s must subclass Command' % cmd_class
  275.         
  276.         if not hasattr(cmd_class, 'user_options') and type(cmd_class.user_options) is ListType:
  277.             raise DistutilsClassError, ('command class %s must provide ' + "'user_options' attribute (a list of tuples)") % cmd_class
  278.         
  279.         negative_opt = self.negative_opt
  280.         if hasattr(cmd_class, 'negative_opt'):
  281.             negative_opt = copy(negative_opt)
  282.             negative_opt.update(cmd_class.negative_opt)
  283.         
  284.         if hasattr(cmd_class, 'help_options') and type(cmd_class.help_options) is ListType:
  285.             help_options = fix_help_options(cmd_class.help_options)
  286.         else:
  287.             help_options = []
  288.         parser.set_option_table(self.global_options + cmd_class.user_options + help_options)
  289.         parser.set_negative_aliases(negative_opt)
  290.         (args, opts) = parser.getopt(args[1:])
  291.         if hasattr(opts, 'help') and opts.help:
  292.             self._show_help(parser, display_options = 0, commands = [
  293.                 cmd_class])
  294.             return None
  295.         
  296.         if hasattr(cmd_class, 'help_options') and type(cmd_class.help_options) is ListType:
  297.             help_option_found = 0
  298.             for help_option, short, desc, func in cmd_class.help_options:
  299.                 if hasattr(opts, parser.get_attr_name(help_option)):
  300.                     help_option_found = 1
  301.                     if callable(func):
  302.                         func()
  303.                     else:
  304.                         raise DistutilsClassError("invalid help function %r for help option '%s': must be a callable object (function, etc.)" % (func, help_option))
  305.                 callable(func)
  306.             
  307.             if help_option_found:
  308.                 return None
  309.             
  310.         
  311.         opt_dict = self.get_option_dict(command)
  312.         for name, value in vars(opts).items():
  313.             opt_dict[name] = ('command line', value)
  314.         
  315.         return args
  316.  
  317.     
  318.     def finalize_options(self):
  319.         keywords = self.metadata.keywords
  320.         if keywords is not None:
  321.             if type(keywords) is StringType:
  322.                 keywordlist = string.split(keywords, ',')
  323.                 self.metadata.keywords = map(string.strip, keywordlist)
  324.             
  325.         
  326.         platforms = self.metadata.platforms
  327.         if platforms is not None:
  328.             if type(platforms) is StringType:
  329.                 platformlist = string.split(platforms, ',')
  330.                 self.metadata.platforms = map(string.strip, platformlist)
  331.             
  332.         
  333.  
  334.     
  335.     def _show_help(self, parser, global_options = 1, display_options = 1, commands = []):
  336.         gen_usage = gen_usage
  337.         import distutils.core
  338.         Command = Command
  339.         import distutils.cmd
  340.         if global_options:
  341.             if display_options:
  342.                 options = self._get_toplevel_options()
  343.             else:
  344.                 options = self.global_options
  345.             parser.set_option_table(options)
  346.             parser.print_help(self.common_usage + '\nGlobal options:')
  347.             print 
  348.         
  349.         if display_options:
  350.             parser.set_option_table(self.display_options)
  351.             parser.print_help('Information display options (just display ' + 'information, ignore any commands)')
  352.             print 
  353.         
  354.         for command in self.commands:
  355.             if type(command) is ClassType and issubclass(command, Command):
  356.                 klass = command
  357.             else:
  358.                 klass = self.get_command_class(command)
  359.             if hasattr(klass, 'help_options') and type(klass.help_options) is ListType:
  360.                 parser.set_option_table(klass.user_options + fix_help_options(klass.help_options))
  361.             else:
  362.                 parser.set_option_table(klass.user_options)
  363.             parser.print_help("Options for '%s' command:" % klass.__name__)
  364.             print 
  365.         
  366.         print gen_usage(self.script_name)
  367.  
  368.     
  369.     def handle_display_options(self, option_order):
  370.         gen_usage = gen_usage
  371.         import distutils.core
  372.         if self.help_commands:
  373.             self.print_commands()
  374.             print 
  375.             print gen_usage(self.script_name)
  376.             return 1
  377.         
  378.         any_display_options = 0
  379.         is_display_option = { }
  380.         for option in self.display_options:
  381.             is_display_option[option[0]] = 1
  382.         
  383.         for opt, val in option_order:
  384.             if val and is_display_option.get(opt):
  385.                 opt = translate_longopt(opt)
  386.                 value = getattr(self.metadata, 'get_' + opt)()
  387.                 if opt in ('keywords', 'platforms'):
  388.                     print string.join(value, ',')
  389.                 elif opt in ('classifiers', 'provides', 'requires', 'obsoletes'):
  390.                     print string.join(value, '\n')
  391.                 else:
  392.                     print value
  393.                 any_display_options = 1
  394.                 continue
  395.         
  396.         return any_display_options
  397.  
  398.     
  399.     def print_command_list(self, commands, header, max_length):
  400.         print header + ':'
  401.         for cmd in commands:
  402.             klass = self.cmdclass.get(cmd)
  403.             if not klass:
  404.                 klass = self.get_command_class(cmd)
  405.             
  406.             
  407.             try:
  408.                 description = klass.description
  409.             except AttributeError:
  410.                 description = '(no description available)'
  411.  
  412.             print '  %-*s  %s' % (max_length, cmd, description)
  413.         
  414.  
  415.     
  416.     def print_commands(self):
  417.         import distutils.command as distutils
  418.         std_commands = distutils.command.__all__
  419.         is_std = { }
  420.         for cmd in std_commands:
  421.             is_std[cmd] = 1
  422.         
  423.         extra_commands = []
  424.         for cmd in self.cmdclass.keys():
  425.             if not is_std.get(cmd):
  426.                 extra_commands.append(cmd)
  427.                 continue
  428.         
  429.         max_length = 0
  430.         for cmd in std_commands + extra_commands:
  431.             if len(cmd) > max_length:
  432.                 max_length = len(cmd)
  433.                 continue
  434.         
  435.         self.print_command_list(std_commands, 'Standard commands', max_length)
  436.         if extra_commands:
  437.             print 
  438.             self.print_command_list(extra_commands, 'Extra commands', max_length)
  439.         
  440.  
  441.     
  442.     def get_command_list(self):
  443.         import distutils.command as distutils
  444.         std_commands = distutils.command.__all__
  445.         is_std = { }
  446.         for cmd in std_commands:
  447.             is_std[cmd] = 1
  448.         
  449.         extra_commands = []
  450.         for cmd in self.cmdclass.keys():
  451.             if not is_std.get(cmd):
  452.                 extra_commands.append(cmd)
  453.                 continue
  454.         
  455.         rv = []
  456.         for cmd in std_commands + extra_commands:
  457.             klass = self.cmdclass.get(cmd)
  458.             if not klass:
  459.                 klass = self.get_command_class(cmd)
  460.             
  461.             
  462.             try:
  463.                 description = klass.description
  464.             except AttributeError:
  465.                 description = '(no description available)'
  466.  
  467.             rv.append((cmd, description))
  468.         
  469.         return rv
  470.  
  471.     
  472.     def get_command_packages(self):
  473.         pkgs = self.command_packages
  474.         if not isinstance(pkgs, type([])):
  475.             if not pkgs:
  476.                 pass
  477.             pkgs = string.split('', ',')
  478.             for i in range(len(pkgs)):
  479.                 pkgs[i] = string.strip(pkgs[i])
  480.             
  481.             pkgs = filter(None, pkgs)
  482.             if 'distutils.command' not in pkgs:
  483.                 pkgs.insert(0, 'distutils.command')
  484.             
  485.             self.command_packages = pkgs
  486.         
  487.         return pkgs
  488.  
  489.     
  490.     def get_command_class(self, command):
  491.         klass = self.cmdclass.get(command)
  492.         if klass:
  493.             return klass
  494.         
  495.         for pkgname in self.get_command_packages():
  496.             module_name = '%s.%s' % (pkgname, command)
  497.             klass_name = command
  498.             
  499.             try:
  500.                 __import__(module_name)
  501.                 module = sys.modules[module_name]
  502.             except ImportError:
  503.                 continue
  504.  
  505.             
  506.             try:
  507.                 klass = getattr(module, klass_name)
  508.             except AttributeError:
  509.                 raise DistutilsModuleError, "invalid command '%s' (no class '%s' in module '%s')" % (command, klass_name, module_name)
  510.  
  511.             self.cmdclass[command] = klass
  512.             return klass
  513.         
  514.         raise DistutilsModuleError("invalid command '%s'" % command)
  515.  
  516.     
  517.     def get_command_obj(self, command, create = 1):
  518.         cmd_obj = self.command_obj.get(command)
  519.         if not cmd_obj and create:
  520.             if DEBUG:
  521.                 print "Distribution.get_command_obj(): creating '%s' command object" % command
  522.             
  523.             klass = self.get_command_class(command)
  524.             cmd_obj = self.command_obj[command] = klass(self)
  525.             self.have_run[command] = 0
  526.             options = self.command_options.get(command)
  527.             if options:
  528.                 self._set_command_options(cmd_obj, options)
  529.             
  530.         
  531.         return cmd_obj
  532.  
  533.     
  534.     def _set_command_options(self, command_obj, option_dict = None):
  535.         command_name = command_obj.get_command_name()
  536.         if option_dict is None:
  537.             option_dict = self.get_option_dict(command_name)
  538.         
  539.         if DEBUG:
  540.             print "  setting options for '%s' command:" % command_name
  541.         
  542.         for source, value in option_dict.items():
  543.             
  544.             try:
  545.                 bool_opts = map(translate_longopt, command_obj.boolean_options)
  546.             except AttributeError:
  547.                 None if DEBUG else None
  548.                 None if DEBUG else None
  549.                 bool_opts = []
  550.             except:
  551.                 None if DEBUG else None
  552.  
  553.             
  554.             try:
  555.                 neg_opt = command_obj.negative_opt
  556.             except AttributeError:
  557.                 None if DEBUG else None
  558.                 None if DEBUG else None
  559.                 neg_opt = { }
  560.             except:
  561.                 None if DEBUG else None
  562.  
  563.             
  564.             try:
  565.                 is_string = type(value) is StringType
  566.                 if neg_opt.has_key(option) and is_string:
  567.                     setattr(command_obj, neg_opt[option], not strtobool(value))
  568.                 elif option in bool_opts and is_string:
  569.                     setattr(command_obj, option, strtobool(value))
  570.                 elif hasattr(command_obj, option):
  571.                     setattr(command_obj, option, value)
  572.                 else:
  573.                     raise DistutilsOptionError, "error in %s: command '%s' has no such option '%s'" % (source, command_name, option)
  574.             continue
  575.             except ValueError:
  576.                 None if DEBUG else None
  577.                 msg = None if DEBUG else None
  578.                 raise DistutilsOptionError, msg
  579.                 continue
  580.             
  581.  
  582.         
  583.  
  584.     
  585.     def reinitialize_command(self, command, reinit_subcommands = 0):
  586.         Command = Command
  587.         import distutils.cmd
  588.         if not isinstance(command, Command):
  589.             command_name = command
  590.             command = self.get_command_obj(command_name)
  591.         else:
  592.             command_name = command.get_command_name()
  593.         if not command.finalized:
  594.             return command
  595.         
  596.         command.initialize_options()
  597.         command.finalized = 0
  598.         self.have_run[command_name] = 0
  599.         self._set_command_options(command)
  600.         if reinit_subcommands:
  601.             for sub in command.get_sub_commands():
  602.                 self.reinitialize_command(sub, reinit_subcommands)
  603.             
  604.         
  605.         return command
  606.  
  607.     
  608.     def announce(self, msg, level = 1):
  609.         log.debug(msg)
  610.  
  611.     
  612.     def run_commands(self):
  613.         for cmd in self.commands:
  614.             self.run_command(cmd)
  615.         
  616.  
  617.     
  618.     def run_command(self, command):
  619.         if self.have_run.get(command):
  620.             return None
  621.         
  622.         log.info('running %s', command)
  623.         cmd_obj = self.get_command_obj(command)
  624.         cmd_obj.ensure_finalized()
  625.         cmd_obj.run()
  626.         self.have_run[command] = 1
  627.  
  628.     
  629.     def has_pure_modules(self):
  630.         if not self.packages and self.py_modules:
  631.             pass
  632.         return len([]) > 0
  633.  
  634.     
  635.     def has_ext_modules(self):
  636.         if self.ext_modules:
  637.             pass
  638.         return len(self.ext_modules) > 0
  639.  
  640.     
  641.     def has_c_libraries(self):
  642.         if self.libraries:
  643.             pass
  644.         return len(self.libraries) > 0
  645.  
  646.     
  647.     def has_modules(self):
  648.         if not self.has_pure_modules():
  649.             pass
  650.         return self.has_ext_modules()
  651.  
  652.     
  653.     def has_headers(self):
  654.         if self.headers:
  655.             pass
  656.         return len(self.headers) > 0
  657.  
  658.     
  659.     def has_scripts(self):
  660.         if self.scripts:
  661.             pass
  662.         return len(self.scripts) > 0
  663.  
  664.     
  665.     def has_data_files(self):
  666.         if self.data_files:
  667.             pass
  668.         return len(self.data_files) > 0
  669.  
  670.     
  671.     def is_pure(self):
  672.         if self.has_pure_modules() and not self.has_ext_modules():
  673.             pass
  674.         return not self.has_c_libraries()
  675.  
  676.  
  677.  
  678. class DistributionMetadata:
  679.     _METHOD_BASENAMES = ('name', 'version', 'author', 'author_email', 'maintainer', 'maintainer_email', 'url', 'license', 'description', 'long_description', 'keywords', 'platforms', 'fullname', 'contact', 'contact_email', 'license', 'classifiers', 'download_url', 'provides', 'requires', 'obsoletes')
  680.     
  681.     def __init__(self):
  682.         self.name = None
  683.         self.version = None
  684.         self.author = None
  685.         self.author_email = None
  686.         self.maintainer = None
  687.         self.maintainer_email = None
  688.         self.url = None
  689.         self.license = None
  690.         self.description = None
  691.         self.long_description = None
  692.         self.keywords = None
  693.         self.platforms = None
  694.         self.classifiers = None
  695.         self.download_url = None
  696.         self.provides = None
  697.         self.requires = None
  698.         self.obsoletes = None
  699.  
  700.     
  701.     def write_pkg_info(self, base_dir):
  702.         pkg_info = open(os.path.join(base_dir, 'PKG-INFO'), 'w')
  703.         self.write_pkg_file(pkg_info)
  704.         pkg_info.close()
  705.  
  706.     
  707.     def write_pkg_file(self, file):
  708.         version = '1.0'
  709.         if self.provides and self.requires or self.obsoletes:
  710.             version = '1.1'
  711.         
  712.         file.write('Metadata-Version: %s\n' % version)
  713.         file.write('Name: %s\n' % self.get_name())
  714.         file.write('Version: %s\n' % self.get_version())
  715.         file.write('Summary: %s\n' % self.get_description())
  716.         file.write('Home-page: %s\n' % self.get_url())
  717.         file.write('Author: %s\n' % self.get_contact())
  718.         file.write('Author-email: %s\n' % self.get_contact_email())
  719.         file.write('License: %s\n' % self.get_license())
  720.         if self.download_url:
  721.             file.write('Download-URL: %s\n' % self.download_url)
  722.         
  723.         long_desc = rfc822_escape(self.get_long_description())
  724.         file.write('Description: %s\n' % long_desc)
  725.         keywords = string.join(self.get_keywords(), ',')
  726.         if keywords:
  727.             file.write('Keywords: %s\n' % keywords)
  728.         
  729.         self._write_list(file, 'Platform', self.get_platforms())
  730.         self._write_list(file, 'Classifier', self.get_classifiers())
  731.         self._write_list(file, 'Requires', self.get_requires())
  732.         self._write_list(file, 'Provides', self.get_provides())
  733.         self._write_list(file, 'Obsoletes', self.get_obsoletes())
  734.  
  735.     
  736.     def _write_list(self, file, name, values):
  737.         for value in values:
  738.             file.write('%s: %s\n' % (name, value))
  739.         
  740.  
  741.     
  742.     def get_name(self):
  743.         if not self.name:
  744.             pass
  745.         return 'UNKNOWN'
  746.  
  747.     
  748.     def get_version(self):
  749.         if not self.version:
  750.             pass
  751.         return '0.0.0'
  752.  
  753.     
  754.     def get_fullname(self):
  755.         return '%s-%s' % (self.get_name(), self.get_version())
  756.  
  757.     
  758.     def get_author(self):
  759.         if not self.author:
  760.             pass
  761.         return 'UNKNOWN'
  762.  
  763.     
  764.     def get_author_email(self):
  765.         if not self.author_email:
  766.             pass
  767.         return 'UNKNOWN'
  768.  
  769.     
  770.     def get_maintainer(self):
  771.         if not self.maintainer:
  772.             pass
  773.         return 'UNKNOWN'
  774.  
  775.     
  776.     def get_maintainer_email(self):
  777.         if not self.maintainer_email:
  778.             pass
  779.         return 'UNKNOWN'
  780.  
  781.     
  782.     def get_contact(self):
  783.         if not self.maintainer and self.author:
  784.             pass
  785.         return 'UNKNOWN'
  786.  
  787.     
  788.     def get_contact_email(self):
  789.         if not self.maintainer_email and self.author_email:
  790.             pass
  791.         return 'UNKNOWN'
  792.  
  793.     
  794.     def get_url(self):
  795.         if not self.url:
  796.             pass
  797.         return 'UNKNOWN'
  798.  
  799.     
  800.     def get_license(self):
  801.         if not self.license:
  802.             pass
  803.         return 'UNKNOWN'
  804.  
  805.     get_licence = get_license
  806.     
  807.     def get_description(self):
  808.         if not self.description:
  809.             pass
  810.         return 'UNKNOWN'
  811.  
  812.     
  813.     def get_long_description(self):
  814.         if not self.long_description:
  815.             pass
  816.         return 'UNKNOWN'
  817.  
  818.     
  819.     def get_keywords(self):
  820.         if not self.keywords:
  821.             pass
  822.         return []
  823.  
  824.     
  825.     def get_platforms(self):
  826.         if not self.platforms:
  827.             pass
  828.         return [
  829.             'UNKNOWN']
  830.  
  831.     
  832.     def get_classifiers(self):
  833.         if not self.classifiers:
  834.             pass
  835.         return []
  836.  
  837.     
  838.     def get_download_url(self):
  839.         if not self.download_url:
  840.             pass
  841.         return 'UNKNOWN'
  842.  
  843.     
  844.     def get_requires(self):
  845.         if not self.requires:
  846.             pass
  847.         return []
  848.  
  849.     
  850.     def set_requires(self, value):
  851.         import distutils.versionpredicate as distutils
  852.         for v in value:
  853.             distutils.versionpredicate.VersionPredicate(v)
  854.         
  855.         self.requires = value
  856.  
  857.     
  858.     def get_provides(self):
  859.         if not self.provides:
  860.             pass
  861.         return []
  862.  
  863.     
  864.     def set_provides(self, value):
  865.         value = [ v.strip() for v in value ]
  866.         for v in value:
  867.             import distutils.versionpredicate as distutils
  868.             distutils.versionpredicate.split_provision(v)
  869.         
  870.         self.provides = value
  871.  
  872.     
  873.     def get_obsoletes(self):
  874.         if not self.obsoletes:
  875.             pass
  876.         return []
  877.  
  878.     
  879.     def set_obsoletes(self, value):
  880.         import distutils.versionpredicate as distutils
  881.         for v in value:
  882.             distutils.versionpredicate.VersionPredicate(v)
  883.         
  884.         self.obsoletes = value
  885.  
  886.  
  887.  
  888. def fix_help_options(options):
  889.     new_options = []
  890.     for help_tuple in options:
  891.         new_options.append(help_tuple[0:3])
  892.     
  893.     return new_options
  894.  
  895. if __name__ == '__main__':
  896.     dist = Distribution()
  897.     print 'ok'
  898.  
  899.